Aprendiendo Javascript, ¿quieres saber por qué esta lógica funciona correctamente?
Específicamente, ¿por qué return multiply(arr, n - 1) * arr[n - 1]; ¿Por qué necesita ser multiplicado por arr[n - 1]
Enfoque no recursivo:
function multiply(arr, n) { let product = 1; for (let i = 0; i < n; i++) { product *= arr[i]; } return product; }Enfoque recursivo:
function multiply(arr, n) { if (n <= 0) { return 1; } else { return multiply(arr, n - 1) * arr[n - 1]; } }Ambos dan el mismo resultado, como deberían.
La lógica de recursión básica es multiplicar el último número con el producto de todos los números anteriores. arr[n - 1] es el último número. (las matrices están indexadas en 0, por lo que n-1 es el último índice).
Si tenemos una matriz como [3, 5, 7, 9], en la primera llamada será como multiply([3,5,7]) * 9
function multiply(arr, n) { if (n <= 0) { return 1; } else { return multiply(arr, n - 1) * arr[n - 1]; } }ok, quieres multiplicar todos o algunos elementos de la matriz. Te digo que no multipliques todos los elementos, es complejo, primero multiplica desde el segundo elemento hasta el último, y por último multiplícalo hasta el primero.
haces eso:
x0 * x1 * x2 * ... * xn => x0 * (x1 * x2 * ... * xn)bien, hazlo de nuevo:
x0 * (x1 * x2 * ... * xn) = x0 * (x1 * (x2 * ... * xn)en cada paso, separas un elemento y sigues...
al final, solo tiene un elemento: xn , por lo que retrocede y multiplica a xn-1 y retrocede al resultado y multiplica a xn-2 ... y al final x0
espero ser de ayuda
Hablando del enfoque recursivo. La función
function multiply(arr, n)tiene el trabajo de multiplicar los primeros n elementos de la matriz (desde el índice 0 hasta el índice n-1)
Cuando usted llama
multiply(arr, n-1)le devolverá el producto de los primeros n-1 elementos de la matriz (desde el índice 0 hasta el índice n-2)
ahora tiene el producto de todos los números en la matriz excepto el último elemento que es arr[n-1]
lo que haces ahora es usar esa respuesta y multiplicar el elemento arr[n-1], que básicamente se ve así
multiply(arr, n - 1) * arr[n - 1];también se puede escribir de la siguiente manera
small_answer = multiply(arr, n - 1) complete_answer = small_answer*arr[n-1] return complete_answerahora su variable complete_answer tendrá el producto de n elementos de la matriz, y lo devolverá como respuesta.